<?php
namespace app\api\controller;

use think\exception\ValidateException;
use think\response\Json;
use app\api\model\Goods as GoodsModel;
use think\Request;
use think\facade\Env;
use think\facade\Db;
class Goods
{
    public function getCategoryList()
    {
        $res =Db::name('category')->select()->toArray();
        return json([
            'code' => 200,
            'data' => $res
        ]);
    }
    public function goodsList()
    {
        $data=input();
        $page = $data['page'] ?? 1;
        $pageSize = $data['pageSize'] ?? 10;
        $keyword = $data['keyword'] ?? '';
        $category = $data['category'] ?? '';
        $result = GoodsModel::getGoodsList($page, $pageSize, $keyword,$category);
        return json($result);
    }

    public function goodsAdd()
    {
        $data = input();

        if (isset($data['goods_img']) && is_array($data['goods_img'])) {
            $data['goods_img'] = implode(';', $data['goods_img']);
        }
        
        // 2. 补充时间字段
        $data['create_time'] = time();
        $data['update_time'] = time();
        // 3. 执行添加操作
        $result = Db::name('goods') 
            ->insert($data);
        
        if ($result) {
            return json([
                'code' => 200,
                'msg' => '商品添加成功'
            ]);
        } else {
            return json([
                'code' => 400,
                'msg' => '商品添加失败'
            ]);
        }
    }

    public function goodsChangeStatus()
    {
        $id = input('post.id');
        $status = input('post.status');
        $goodsData=Db::name('goods')->where('id',$id)->find();
        if (!$goodsData) {
            return json(['code' => 400, 'msg'=> '商品不存在']);
        }
        $res = Db::name('goods')->where('id',$id)->update(['status'=>$status]);
        return json(['code' => 200, 'msg'=> '状态修改成功']);
    }

    public function goodsEdit()
    {
        $data = input();
        $id = (int)$data['id']; // 确保ID为整数

        // 1. 验证参数
        if (empty($id)) {
            return json([
                'code' => 400,
                'msg' => '请传入要编辑的商品ID'
            ]);
        }

        // 2. 查询店铺是否存在
        $goods = Db::name('goods')->where('id', $id)->find();
        if (!$goods) {
            return json([
                'code' => 400,
                'msg' => '该商品不存在或已被删除'
            ]);
        }

        if (isset($data['goods_img']) && is_array($data['goods_img'])) {
            $data['goods_img'] = implode(';', $data['goods_img']);
        }

        // 4. 补充更新时间
        $data['update_time'] = time();

        // 5. 执行更新（排除ID字段，避免更新主键）
        unset($data['id']);
        $result = Db::name('goods')->where('id', $id)->update($data);

        if ($result) {
            return json([
                'code' => 200,
                'msg' => '商品信息更新成功'
            ]);
        } else {
            return json([
                'code' => 400,
                'msg' => '商品信息更新失败'
            ]);
        }
    }

    public function goodsDel()
    {
        // 获取1. 获取并验证ID参数
        $id = input('id/d'); // 强制转为整数
        if (empty($id)) {
            return json([
                'code' => 400,
                'msg' => '请传入要删除的商品ID'
            ]);
        }

        // 2. 检查店铺是否存在
        $goods = Db::name('goods')->where('id', $id)->find();
        if (!$goods) {
            return json([
                'code' => 400,
                'msg' => '该商品不存在或已被删除'
            ]);
        }

        // 3. 执行删除操作（物理删除）
        // 若需要逻辑删除，可改为更新status字段：->update(['status' => 0])
        $result = Db::name('goods')->where('id', $id)->delete();

        if ($result) {
            // 4. 可选：删除关联的图片文件（若图片存储在服务器本地）
            if (!empty($shop['shop_img'])) {
                $imgPaths = explode(';', $shop['shop_img']);
                foreach ($imgPaths as $img) {
                    $localPath = public_path() . ltrim($img, '/'); // 拼接本地路径
                    if (file_exists($localPath)) {
                        unlink($localPath); // 删除服务器上的图片文件
                    }
                }
            }

            return json([
                'code' => 200,
                'msg' => '删除成功'
            ]);
        } else {
            return json([
                'code' => 400,
                'msg' => '删除失败，请重试'
            ]);
        }
    }

    //上传图片，
    public function upload()
    {
        // 获取上传的文件（前端表单字段名需为 'image'）
        $file = request()->file('image');
        if (is_null($file)) {
            return json(['code' => 400, 'msg' => '未找到上传文件']);
        }

        try {
            // 1. 验证文件类型和大小
            validate(['image' => [
                // 允许的文件后缀
                'fileExt' => 'jpg,png,jpeg',
                // 允许的文件大小（2MB）
                'fileSize' => 2 * 1024 * 1024,
            ]])->check(['image' => $file]);

            // 2. 定义上传目录（public/static/images/goods
            $uploadDir = public_path() . 'static/images/goods/';
            if (!is_dir($uploadDir)) {
                mkdir($uploadDir, 0755, true);
            }

            // 3. 生成唯一文件名（原文件名 + 时间戳 + 随机数，避免重复）
            $originalName = pathinfo($file->getOriginalName(), PATHINFO_FILENAME);
            $extension = $file->getOriginalExtension();
            $fileName = $originalName . '_' . time() . '_' . mt_rand(1000, 9999) . '.' . $extension;

            // 4. 移动文件到目标目录
            $file->move($uploadDir, $fileName);

            // 5. 生成可访问的图片路径（相对于网站根目录）
            $relativePath = '/static/images/goods/' . $fileName;

            return json([
                'code' => 200,
                'path' => $relativePath, // 前端可直接用于 img 的 src
                'msg' => '上传成功'
            ]);

        } catch (ValidateException $e) {
            // 文件验证失败（类型/大小不符）
            return json(['code' => 400, 'msg' => $e->getMessage()]);
        } catch (\Exception $e) {
            // 其他错误（如目录不可写）
            return json(['code' => 400, 'msg' => '上传失败：' . $e->getMessage()]);
        }
    }

    //前台获取商品列表
    public function indexGetGoodsList()
    {
        $goodsData = Db::name('goods')->order('category_id','desc')->select()->toArray();
            $result = [
            'code' => 200,
            'data' => $goodsData
        ];
        return json($result);
    }

    //前台获取商品类别
    public function indexGetCategoryList()
    {
        $categoryData = Db::name('category')->order('id','desc')->select()->toArray();
        $result = [
            'code' => 200,
            'data' => $categoryData
        ];
        return json($result);
    }

    //前台获取商品详情
    public function indexGetGoodsDetail()
    {
        $id = input('id/d'); // 强制转为整数
        if (empty($id)) {
            return json([
                'code' => 400,
                'msg' => '请传入要查看的商品ID'
            ]);
        }
        $goodsData = Db::name('goods')->where('id', $id)->find();
        if (!$goodsData) {
            return json([
                'code' => 400,
                'msg' => '该商品不存在或已被删除'
            ]);
        }
        $result = [
            'code' => 200,
            'data' => $goodsData
        ];
        return json($result);
    }
    
}